/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Visao.Gerente.Gerenciar;

import Controle.Controlador;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JOptionPane;
import javax.swing.text.DefaultFormatterFactory;
import javax.swing.text.MaskFormatter;

/**
 *
 * @author Andre Luiz
 */
public class InserirAlterarAcomp extends javax.swing.JFrame {

    boolean update = false;
    GerenciarAcompanhamentos gerenciar;
    int codigoAcompUpdate;
    
    /**
     * Creates new form InserirAlterarAcomp
     */
    public InserirAlterarAcomp() {
        initComponents();
    }
    
    public InserirAlterarAcomp(GerenciarAcompanhamentos gerenciar) {
        initComponents();
        this.gerenciar = gerenciar;
        
    }
    
    public InserirAlterarAcomp(GerenciarAcompanhamentos gerenciar, int codigo) {
        initComponents();
        this.gerenciar = gerenciar;
        this.update = true;
        this.codigoAcompUpdate = codigo;
        MaskFormatter mascara = null; 
        DefaultFormatterFactory formato;
        try {
            mascara = new javax.swing.text.MaskFormatter("**.**");
            formato = new javax.swing.text.DefaultFormatterFactory(mascara);
            jtfValor.setFormatterFactory(formato);
        } catch (java.text.ParseException ex) {
            ex.printStackTrace();
        }
        setDadosVisao(Controlador.convertModeloAcompanhamentoToDadosVisao(codigo));
        try {
            mascara.setMask("##.##");
        } catch (java.text.ParseException ex) {
            ex.printStackTrace();
        }
    }
    
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jtfValor = new javax.swing.JFormattedTextField();
        jtfProduto = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jbCancelar = new javax.swing.JButton();
        jbConcluir = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Inseir Acompanhamento");
        setResizable(false);

        try {
            jtfValor.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("##.##")));
        } catch (java.text.ParseException ex) {
            ex.printStackTrace();
        }
        jtfValor.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        jtfValor.setFocusLostBehavior(javax.swing.JFormattedTextField.COMMIT);
        jtfValor.setPreferredSize(new java.awt.Dimension(150, 22));

        jtfProduto.setToolTipText("Nome do Produto");
        jtfProduto.setPreferredSize(new java.awt.Dimension(150, 22));

        jLabel1.setText("Produto");

        jLabel2.setText("Valor:");

        jbCancelar.setText("Cancelar");
        jbCancelar.setToolTipText("Cancelar");
        jbCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbCancelarActionPerformed(evt);
            }
        });

        jbConcluir.setText("OK");
        jbConcluir.setToolTipText("Concluir");
        jbConcluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbConcluirActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(24, 24, 24)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabel1)
                            .addComponent(jLabel2))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jtfValor, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jtfProduto, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jbCancelar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jbConcluir)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(19, 19, 19)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(jtfProduto, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(jtfValor, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jbCancelar)
                    .addComponent(jbConcluir))
                .addContainerGap(17, Short.MAX_VALUE))
        );

        pack();
        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        java.awt.Dimension dialogSize = getSize();
        setLocation((screenSize.width-dialogSize.width)/2,(screenSize.height-dialogSize.height)/2);
    }// </editor-fold>//GEN-END:initComponents

    private void jbConcluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbConcluirActionPerformed
        /// Botãoo Concluir
        if (!update) {
            try {
                validarEntradaDados();
               
                if (Controlador.salvar_Acompanhamento((getDadosVisao()))){
                    this.setVisible(false);
                    gerenciar.atualizaTabela();
                }
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, e.getMessage(),"Erro!",0);
            }
        } else {
            try {
                validarEntradaDados();               

                if (Controlador.editar_Acompanhamento(getDadosVisao())){
                    this.setVisible(false);
                    gerenciar.atualizaTabela();
                }
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, e.getMessage(),"Erro!",0);
            }
        }
    }//GEN-LAST:event_jbConcluirActionPerformed

    private void jbCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbCancelarActionPerformed
        // Botão Cancelar
        dispose();
    }//GEN-LAST:event_jbCancelarActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JButton jbCancelar;
    private javax.swing.JButton jbConcluir;
    private javax.swing.JTextField jtfProduto;
    private javax.swing.JFormattedTextField jtfValor;
    // End of variables declaration//GEN-END:variables
    
    private void validarEntradaDados() throws Exception{
        Matcher restricao = Pattern.compile("[a-zA-Z]").matcher(jtfProduto.getText());
        
        if(jtfProduto.getText().length()==0){
            throw new Exception("Digite um Nome para o Produto");
        }
        if(jtfProduto.getText().contains(",")){
            throw new Exception("O Nome do Produto é inválido!\nO nome do produto não poderá conter virgulas(,)");
        }
        if (!restricao.find()) {
            throw new Exception("O Nome do Produto é inválido!\nO nome deverá conter ao menos uma letra.");
        }
        
        restricao = Pattern.compile("[a-zA-Z]").matcher(jtfValor.getText());
        if(jtfValor.getText().length()==0){
            throw new Exception("Digite um Valor para o Produto");
        }
        if(restricao.find()){
            throw new Exception("O Valor do Produto é inválido!\nO valor deverá não conter letras ou caracteres especiais (!@#$%^&*~`;:'?/,+-=).");
        }
        if(validarFloat(jtfValor.getText())==null){
            throw new Exception("O Valor do Produto é inválido!\nO valor deve seguir o seguinte formato: ##.## exemplo 12.34");
        }
    }
    
    private Float validarFloat(String str){
        Float aux = null;
        try{
             aux=Float.parseFloat(str);
        }catch(NumberFormatException ex){
            return null;
        }
        return aux;
    }
    
    private ArrayList<String> getDadosVisao(){
        ArrayList<String>  acomp = new ArrayList();
        acomp.add(""+codigoAcompUpdate);
        acomp.add(jtfProduto.getText().toUpperCase());
        acomp.add(jtfValor.getText());
        
        return acomp;
    }
    
    private void setDadosVisao(ArrayList<String> param){
        jtfProduto.setText(param.get(1));
        jtfValor.setText(param.get(2));
    }
}
